
#ifndef ROTATION_H
#define ROTATION_H

/*
旋转：包括旋转轴、旋转角度
*/

#include <algorithm/shared/utils/Vec3.h>
#include <utils/ParaUtils.h>

#include <boost/describe.hpp>

#include <string>

namespace solar
{
    class Rotation
    {
        public:
            Rotation(const Vec3& axis = Vec3(1, 0, 0), double angle = 0)
                : axis_(axis), angle_(angle)
            {
                // qDebug()<<"====================use rotation default construct==========";
            }
            Rotation(double a, double b, double c, double d) : Rotation(Vec3(a, b, c), d) {}

            // void setPara(const std::string& property_type, const QVariant& value);
            // auto getPara(const std::string& property_type) -> QVariant;
            // void testPrint() const;

            // 转化为string，前三个表示axis，最后一个数表示angle
            [[nodiscard]] auto toString() const -> std::string;
            static auto fromString(const std::string& input) -> Rotation;

#include <utils/class_name.inc>

        private:
            Vec3 axis_;      // 旋转轴
            double angle_{}; // 旋转角度
            BOOST_DESCRIBE_CLASS(solar::Rotation, (), (), (), (axis_, angle_))
    };
} // namespace solar
#define CURRENT_CLASS_NAME Rotation
#include <utils/class_describe_header.inc>
SOLAR_DESCRIBE_CLASS(Rotation, (), (), (), (axis_, angle_))
// Q_DECLARE_METATYPE(solar::Rotation)

#endif // ROTATION_H
